import java.util.HashMap;
import java.util.Scanner;

//给你一个整数数组 nums 和一个整数 k ，请你统计并返回 该数组中和为 k 的子数组的个数 。
//
//子数组是数组中元素的连续非空序列。
//这道题是不能直接用 滑动窗口 来进行计算的,因为题目中表示数组中的元素是会包含负数的,也就是说明,如果我们使用滑动窗口来进行计算的话
//可能会出现这种情况: 在滑动窗口满足题目条件的同时,很可能滑动窗口内部也有部分连续元素也满足条件,但是这种情况很可能被滑动窗口忽略掉
public class test5 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int[] nums = new int[n];
        for (int i = 0; i < n; i++) {
            nums[i] = in.nextInt();
        }
        int k = in.nextInt();
        int result = subarraySum(nums,k);
        System.out.println(result);
    }

    public static int subarraySum(int[] nums, int k) {
        HashMap<Integer,Integer> map = new HashMap<>();
        map.put(0,1);//为了防止出现:第i个数的前缀和就是k的情况(此时要加入的就是 sum-k==0),我们要先将前缀和为0 的情况加入
        int sum = 0,ret=0; //用sum来表示前缀和 ret来表示

        for(int x:nums){
            sum+=x;
            ret += map.getOrDefault(sum-k,0);//获取sum-k对应的个数
            map.put(sum, map.getOrDefault(sum,0)+1);
        }
        return ret;
    }
}
